﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ForrajeriaDB; //ESTE USING VA EN TODOS LOS ELEMENTOS DE ESTA CAPA
using System.Data;
using System.Data.SqlClient;

namespace ForrajeriaDAL
{
    public class PedidoProveedorDAL : AccesoDAL, InterfazDAL<PedidoProveedorMO>
    {
        #region VARIABLES PARA STORED QUE MANEJA EL OBJETO DE DAL

        private static string insert = "PedidoProveedor_INSERT";
        private static string delete = "PedidoProveedor_DELETE";
        private static string update = "PedidoProveedor_UPDATE";
        private static string all = "PedidoProveedor_GetALL";
        private static string getXID = "PedidoProveedor_GetByID";
        private static string allRegistrar = "PedidoProveedor_GetALLRegistrar";

        #endregion
        private SqlCommand cmd;

        public List<PedidoProveedorMO> GetAll()
        {
            throw new NotImplementedException();
        }

        public void Adicionar(PedidoProveedorMO item)
        {
            throw new NotImplementedException();
        }

        public void Eliminar(PedidoProveedorMO item)
        {
            throw new NotImplementedException();
        }

        public void Actualizar(PedidoProveedorMO nuevoItem, PedidoProveedorMO origItem)
        {
            throw new NotImplementedException();
        }

        public int AdicionarRetorno(PedidoProveedorMO item)
        {
            try
            {
                item.NumeroPedido = getCodigoInsert("Pedido", "numeroPedido");

                SqlCommand cmd = new SqlCommand(insert, getConexion());
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@nroPedido", item.NumeroPedido));
                cmd.Parameters.Add(new SqlParameter("@fechaPedido",  item.FechaPedido));
                cmd.Parameters.Add(new SqlParameter("@codProveedor", item.CodProveedor));
                cmd.Parameters.Add(new SqlParameter("@estadoPedido", item.EstadoPedido));

                opencon();

                cmd.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                closecon();
            }

            return item.NumeroPedido;
        }


        public List<PedidoMO> buscarPedido(string estado, DateTime desde, DateTime hasta)
        {
            List<PedidoMO> reto = new List<PedidoMO>();

            cmd = new SqlCommand("PedidoProveedor_Buscar", getConexion());
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("@estado", estado));
            cmd.Parameters.Add(new SqlParameter("@desde", desde));
            cmd.Parameters.Add(new SqlParameter("@hasta", hasta));
            SqlDataReader rea;

            try
            {
                opencon();
                rea = cmd.ExecuteReader();

                while (rea.Read())
                {
                    PedidoMO aux = new PedidoMO();
                    aux.EstadoPedido = rea["estadoPedido"].ToString();
                    aux.FechaPedido = DateTime.Parse(rea["fechaPedido"].ToString());
                   
                    if (rea["fechaDeEntrega"].ToString() != "")
                        aux.FechaDeEntrega = DateTime.Parse(rea["fechaDeEntrega"].ToString());

                    aux.CodigoProveedor = int.Parse(rea["codProveedor"].ToString());
                    aux.NumeroPedido = int.Parse(rea["numeroPedido"].ToString());
                    if (rea["nroFacturaPedido"].ToString() != "")
                        aux.NroFacturaPedido = int.Parse(rea["nroFacturaPedido"].ToString());
                   

                    reto.Add(aux);
                }

                rea.Close();
                return reto;
            }
            catch (SqlException ex)
            {
                throw new Exception("Error SQL: " + ex.Message);
            }

            catch (Exception ex)
            {
                throw new Exception("Error Desconocido: " + ex.Message);
            }

            finally
            {

                closecon();
            }
        }

        public DataTable obtenerDetalle(int p)
        {
            DataTable dt = new DataTable();

            try
            {
                SqlCommand cmd = new SqlCommand("DetallePedidoProveedor_ByID", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@IDPEDIDO", p));

                SqlDataAdapter da = new SqlDataAdapter(cmd);
                opencon();

                da.Fill(dt);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                closecon();

            }
            return dt;
        }
    }
}
